In some contexts, the integrity of data is of secondary importance. In audio or video data, for example, applications that process the data are often robust enough such that minor changes in the data relative to its original state do not have a significant effect. A minor corruption to a video file, for example, may cause a defect in the video display that is not humanly perceptible or, if perceptible, highly insignificant. In other contexts, however, the integrity of data is of higher importance. Some applications, for example, are not robust enough to successfully handle data corruption errors. As an illustration, an application that utilizes a cryptographic primitive (e.g., an encryption/decryption algorithm and/or digital signature algorithm) may provide invalid results if a cryptographic key becomes corrupt, even by a single bit, between a first use (e.g., for encryption or generation of a digital signature) and a second use (e.g., decryption or verification of a digital signature).
With computer networks and distributed systems in general, data can have multiple opportunities for becoming corrupt. For example, transmission of data over a network involves numerous operations, each typically having a small probability of corrupting the data. For instance, data is typically written to some sort of memory and the writing process may not always complete without errors, such as a bit changing from zero to one, or vice versa. Reading the data out of memory can also introduce the opportunity for corruption. Transmitting the data to the network often involves the transmission of data through multiple components of a computing device until, for example, the data passes out of a network interface card onto the network. Similarly, on a network, the data may pass through multiple computing devices (e.g., routers and/or other network devices) and through multiple components of those computing devices. When the data has reached its destination device, it may pass through multiple components and be written to memory. Finally, while at rest (e.g., persistently stored in non-volatile memory), numerous operations may affect the data, such as encryption operations, compression operations or movement of the data from one storage location to another. While each of these operations affecting the data may have a very low probability of corrupting it when components involved with the data are functioning properly, the aggregate probability of data corruption may be significant with large enough volumes of data.